package com.ch_linghu.fanfoudroid.task;

import java.util.HashMap;

import org.json.JSONException;

import com.ch_linghu.fanfoudroid.http.HttpException;


/**
 * 暂未使用，待观察是否今后需要此类
 * @author lds
 *
 */
public class TaskParams {
	
	private HashMap<String, Object> params = null;
	
	public TaskParams() {
		params = new HashMap<String, Object>();
	}
	
	public TaskParams(String key, Object value) {
		this();
		put(key, value);
	}
	
	public void put(String key, Object value) {
		params.put(key, value);
	}
	
	public Object get(String key) {
		return params.get(key);
	}
	
    /**
     * Get the boolean value associated with a key.
     *
     * @param key   A key string.
     * @return      The truth.
     * @throws      HttpException
     *  if the value is not a Boolean or the String "true" or "false".
     */
    public boolean getBoolean(String key) throws HttpException {
        Object object = get(key);
        if (object.equals(Boolean.FALSE) ||
                (object instanceof String &&
                ((String)object).equalsIgnoreCase("false"))) {
            return false;
        } else if (object.equals(Boolean.TRUE) ||
                (object instanceof String &&
                ((String)object).equalsIgnoreCase("true"))) {
            return true;
        }
        throw new HttpException(key + " is not a Boolean.");
    }


    /**
     * Get the double value associated with a key.
     * @param key   A key string.
     * @return      The numeric value.
     * @throws HttpException if the key is not found or
     *  if the value is not a Number object and cannot be converted to a number.
     */
    public double getDouble(String key) throws HttpException {
        Object object = get(key);
        try {
            return object instanceof Number ?
                ((Number)object).doubleValue() :
                Double.parseDouble((String)object);
        } catch (Exception e) {
            throw new HttpException(key + " is not a number.");
        }
    }


    /**
     * Get the int value associated with a key. 
     *
     * @param key   A key string.
     * @return      The integer value.
     * @throws   HttpException if the key is not found or if the value cannot
     *  be converted to an integer.
     */
    public int getInt(String key) throws HttpException {
        Object object = get(key);
        try {
            return object instanceof Number ?
                ((Number)object).intValue() :
                Integer.parseInt((String)object);
        } catch (Exception e) {
            throw new HttpException(key + " is not an int.");
        }
    }
    
    /**
     * Get the string associated with a key.
     *
     * @param key   A key string.
     * @return      A string which is the value.
     * @throws   JSONException if the key is not found.
     */
    public String getString(String key) throws HttpException {
        Object object = get(key);
        return object == null ? null : object.toString();
    }


    /**
     * Determine if the JSONObject contains a specific key.
     * @param key   A key string.
     * @return      true if the key exists in the JSONObject.
     */
    public boolean has(String key) {
        return this.params.containsKey(key);
    }

}
